package com.apobates.forum.toro.template.strategy;

import com.apobates.forum.toro.template.TemplateStatements;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;

/**
 * 值对象聚合策略
 * 适用于: TemplateStatements模式的构造策略
 * @param <E> 目标对象类型
 * @param <T> 基础对象类型
 *
 * @author xiaofanku@live.cn
 * @since 20220517
 */
@FunctionalInterface
public interface TemplateBasisStrategy<E,T> {
    /**
     * 策略的执行入口
     * @param targetObjClass 目标对象Class.可能为null;
     * @param selectObj 基础对象实例.可能为null
     * @param statements 聚合属性语句
     * @param queries 聚合属性的查询
     * @return
     */
    Optional<E> apply(
            Class<E> targetObjClass,
            T selectObj,
            List<TemplateStatements> statements,
            Map<String, Function<String,?>> queries);
}
